# 导入所需的库
import pandas as pd  # 用于数据处理和读取Excel文件
import matplotlib.pyplot as plt  # 用于绘图和显示词云
from wordcloud import WordCloud  # 用于生成词云

# 设置matplotlib的中文字体，确保中文可以正常显示
plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体为黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决坐标轴负号显示问题

# 读取Excel文件
file_path = 'jobs.xlsx'  # Excel文件路径
df = pd.read_excel(file_path)  # 使用pandas读取Excel文件内容

# 提取'welfareList'列，并去除空值后转为列表
welfare = df['welfareList'].dropna().tolist()

# 统计福利出现的次数
welfare_counts = {}  # 创建一个空字典用于存储福利及其出现次数
for welfare_list in welfare:  # 遍历福利列表
    for item in welfare_list.split(','):  # 将每个福利字符串按逗号分割
        item = item.strip()  # 去除多余的空格
        if item:  # 如果福利项不为空
            if item in welfare_counts:  # 如果该福利项已存在于字典中
                welfare_counts[item] += 1  # 出现次数加1
            else:
                welfare_counts[item] = 1  # 否则初始化为1

# 生成词云
wordcloud = WordCloud(
    width=800,  # 设置词云宽度
    height=400,  # 设置词云高度
    background_color='white',  # 设置词云背景颜色为白色
    font_path='simhei.ttf'  # 指定字体路径，确保中文可以正常显示
).generate_from_frequencies(welfare_counts)  # 根据福利出现次数生成词云

# 显示词云
plt.figure(figsize=(10, 6))  # 设置图像大小
plt.imshow(wordcloud, interpolation='bilinear') #使用双线性插值平滑显示词云图像
plt.title('Python工程师福利待遇词云', fontsize=16)  # 添加标题
plt.axis('off')  # 关闭坐标轴

# 保存并显示图表
plt.savefig('welfare_wordcloud.png')  # 将词云图像保存为文件
plt.show()  # 显示词云图像